/**
*	@class CTexture
*
*	@brief
*
*	@author William McVicar
*/

#pragma once

#ifndef __TEXTURE_BASE_H_INCLUDED__
#define __TEXTURE_BASE_H_INCLUDED__

//  Library Includes

//  Local Includes
#include "Image.h"

//  Macros

//  Forward Declarations

//  Types

//  Constants

//  Prototypes

namespace Protein
{

class TextureBase
{
	friend class TextureManager;
	//Member Functions
public:

	TextureBase( const std::string& _krName );
	TextureBase( const char* szName );
	~TextureBase();

	inline bool Is1D() const;
	inline bool Is2D() const;
	inline bool Is3D() const;
	inline const Image& image() const { return m_Image; }

	bool Load();
	bool Unload();

protected: 

private: 

	//Member Variables
public:

protected: 

private: 

	Image				m_Image;

	std::string			m_textureName;

	u32					m_referenceCount;
};

#include "TextureBase.inl"

}

#endif //__TEXTURE_BASE_H_INCLUDED__
